/*
 * Copyright 2011 Katsunori Koyanagi
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package sweezy.core.log.writers
{
	import flash.external.ExternalInterface;
	import sweezy.core.log.LogWriter;

	public class ConsoleLogWriter extends LogWriter
	{

		private static var _enabled:Boolean;

		private static var _functions:Vector.<String>;

		private static var _initialized:Boolean;

		public function ConsoleLogWriter()
		{
			if (!_initialized)
			{
				_initialized = true;
				init();
			}
		}

		override protected function writeString(level:uint, name:String, logString:String):void
		{
			if (!_enabled)
			{
				return;
			}

			ExternalInterface.call(_functions[level], logString);
		}

		private function init():void
		{
			if (!ExternalInterface.available)
			{
				return;
			}

			_functions = Vector.<String>(["console.debug", "console.log", "console.warn", "console.error", "console.error"]);

			var policy:Boolean = ExternalInterface.marshallExceptions;
			ExternalInterface.marshallExceptions = true;

			try
			{
				_enabled = ExternalInterface.call("function(){return window.console}") !== null;
			}
			catch (e:*)
			{
			}
			finally
			{
				ExternalInterface.marshallExceptions = policy;
			}
		}
	}
}
